C语言指针与函数篇

来源:互联网 发布:淘宝商品权重 编辑:程序博客网 时间:2024/04/29 16:38

1:数组与指针

数组的定义与访问:

int a[10]  /*定义10个变量的整形数组*/

float f[20] /*定义20个变量的浮点形数组*/

char s[5] /*定义5个变量的字符形数组*/

数组在定义时,可以不指定变量的个数,在访问变量时可以动态改变数组中变量的个数。

char a[];/*定义一个含有不定个数变量的字符数组*/


指针:

指针是一种特殊的数据类型,用来存储一个变量的内存地址。通过一个指针,可以访问这个指针的变量。

指针操作符有*和&两个,分别实现取变量和取地址的操作

例如:

int *p;   /定义一个指针变量/

int i=5,j; /定义一个整变量/

p=&i; /取变量i的地址赋值给p/

i=*p; /取指针p的地址赋值给j/


数组和指针

定义一个数组的时候,定义这个数组的头指针,然后分配若干个存储单元。定义的数组名称可以直接赋值给一个指针,而这个指针可以指向这个数组的第一个元素。

例子

#incluede<stdio.h>

void main()

{

int i;

int *p;

int a[10];

for (i = 0 ; i < 10; i++)

{

a[i] = i + 10;

}

p=a;                 //将数组a的指针赋值给p

for(i = 0; i < 10;i++)

{

printf("%d ",*p);   // 输出指针p指向的值

p++;                      //指针p向后移动一个单元

}

printf("\n",*p);

p = p - 4;        //指针p向前移动4个单元

printf("%d ",*p);

}


二维数组与指针

int a[4][5];

int *p;

p=a;

数组中变量的指针地址与首指针存在这下面的关系 q = p + (行数*总列数)+ 列数

例子:

#include<stdio.h>

void main()

{

int i = 10 , m , n;

int a[4][5];

int  *p;

for( m = 0 ; m < 4; m++)

    for(n = 0; n < 5;n++)

    {

          a[m][n] = i;

           i++;

    }

p=a;

for(m = 0; m < 4; m ++)

     for(n = 0 ; n < 5; n++)

     {

         printf("a[%d][%d] = %d",m,n,*(p+(5*m)+n));

     }

      printf("\n");

}

函数与指针

函数的声明

在c程序中,自定义函数需要写在被调用的函数的前面。如果前面的函数调用了后面的函数,程序就会发生错误,提示程序中找不到相应的函数,如果需要调用后面的自定义函数,需要在程序最前面声明函数。

函数声明实例:

#include<stdio.h>

void myresult(int x);

char result(int aax);

int main()

{

int i =1 ;

while(i != 0)

{

scanf("%d",&i);

myresult(i);

}

void myresult(int x)

{

char s;

if(x > 0 && x <= 100)

{

s = result(x);

printf("%c\n",s);

}

else

{

pritnf("error/\n",s);

}

}

char result(int x)

{

char s ='A';

return s;

}

}

main 函数的参数 argc 与  argv

argc 是一个整形变量,表示参数的个数。*argv[] 是一个指针型数组,数组中的每一个指针指向一个参数的字符数组。

例子:

#include<stdio.h>

int main(int argc , char *argv[] )

{

int i;

for(i = 0; i < argc ; i++)

{

printf("%s\n",argv[i]);

}

}

函数与指针

函数对参数的调用,有值调用和引用调用两种方法。

值调用:进行函数调用时候,给形式参数分配内存空间,并把实际参数的值直接传递给形式参数,这一过程是参数值的直接传递过程,一旦形式参数获得了值,便于实际参数没有关系。形式参数的变化对实际参数没有任何影响。

引用调用:当用指针或数组作为函数的参数时,可以用指针来访问实际参数的值。形式参数的变化,将直接引起实际参数的变化。

指针参数的简单实例:

#include<stdio.h>

void order(int *x  , int *y , int  *z);

main()

{

int a,b,c;

a = 5;

b = 3;

c = 8;

printf("%d %d %d\n",a,b,c);

order(&a,&b,&c);

printf("%d %d %d\n",a,b,c);

}

void order(int *x , int *y, int *z)

{

int temp;

if(*x > *y)

{

temp = *x;

*x = *y;

*y = temp;

}

if(*x > *z)

{

temp = *x;

*x = *z;

*z = temp;

}

if(*y > *z)

{

temp = *y;

*y = *z;

*z = temp;

}

}

数组作为函数参数实例

数组名即为数组的首地址,可以作为指针变量来使用。

#include<stdio.h>

void stradd(char *a, char *b, char *c)
{

while(*a != NULL)

{

*c = *a;

c++;

a++;

}

while(*b != NULL)

{

*c = *b;

c++;

b++;

}

}

int main()

{

char a[30]="abcdefg";

char b[30]="HIJKLMN";

char c[30]="";

printf("a: %s\n",a);

printf("b: %s\n",b);

stradd(a,b,c);

printf("c: %s\n",c);

}

函数返回指针实例

#include<stdio.h>

char * stradd(char *a, char *b)

{

char *p;

p=a;

while(*a != NULL)

        a++;

while(*b != NULL)

{

*a = *b;

b++;

a++;

}

return (p); //返回指针p

}

int main()

{

char a[30]="abcdefg";

char b[30]="HIJKLMN";

char *c;

printf("a: %s\n",a);

printf("b: %s\n",b);

c=stradd(a,b);

printf("c: %s\n",c);

}

原创粉丝点击