先看实例:
代码2-1
#include <stdio.h>
int main()
{
int a;
int *p = &a;
printf("请输入一个整数:");
scanf("%d", &a);
printf("a = %d\n", a);
printf("请输入一个新的整数:");
scanf("%d", p);
printf("a = %d\n",a);
return 0;
}
~
输出信息:
请输入一个整数:1
a = 1
请输入一个新的整数:2
a = 2
scanf("%d", &a);
这句是让用户输入数据,然后放如a地址里面去。
scanf("%d", p);
这句是让用户输入数据,然后放入指针p指向的那个变量地址里面去。
1、用字符数组的形式来存储字符串
代码2-1
#include <stdio.h>
int main()
{
char str[128];
printf("请输入你的名字:");
scanf("%s",str);
printf("%s\n", str);
return 0;
}
~
输出信息:
请输入你的名字:david
david
char str[128];
定义一个数组
scanf("%s", str);
输入字符串是%s,str和指针一样,不用加取值操作符。
代码2-3
#include <stdio.h>
int main()
{
char str[128];
printf("请输入你的名字:");
scanf("%s",str);
printf("str的地址是:%p\n", str);
printf("str的地址是:%p\n", &str[0]);
return 0;
}
输出信息:
请输入你的名字:david
str的地址是:0x7ffdc7d94b60
str的地址是:0x7ffdc7d94b60
数组名就是一个地址,它是数组第一个元素的地址。
代码2-4
#include<stdio.h>
int main()
{
char a[] = "fish";
int b[5] = {1, 2, 3, 4, 5};
float c[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double d[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
printf("a[0] -> %p, a[1]-> %p. a[2] -> %p\n", &a[0], &a[1], &a[2]);
printf("b[0] -> %p, b[1]-> %p. b[2] -> %p\n", &b[0], &b[1], &b[2]);
printf("c[0] -> %p, c[1]-> %p. c[2] -> %p\n", &c[0], &c[1], &c[2]);
printf("d[0] -> %p, d[1]-> %p. d[2] -> %p\n", &d[0], &d[1], &d[2]);
return 0;
}
输出信息:
a[0] -> 0x7fff77157900, a[1]-> 0x7fff77157901. a[2] -> 0x7fff77157902
b[0] -> 0x7fff77157890, b[1]-> 0x7fff77157894. b[2] -> 0x7fff77157898
c[0] -> 0x7fff771578b0, c[1]-> 0x7fff771578b4. c[2] -> 0x7fff771578b8
d[0] -> 0x7fff771578d0, d[1]-> 0x7fff771578d8. d[2] -> 0x7fff771578e0
可以看出,char类型的数组a的每个元素占1个字节。
int类型数组b,每个元素占4个字节。
float类型数组c,每个元素占4个字节。
double类型数组d,每个元素占8个字节。
代码2-5
#include <stdio.h>
int main()
{
char a[] = "fish";
int b[5] = {1, 2, 3, 4, 5};
float c[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double d[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
char *p1 = a;
printf("*p1=%c, *(p1+1)=%c, *(p1+2) = %c\n", *p1, *(p1+1), *(p1+2));
return 0;
}
输出结果:
*p1=f, *(p1+1)=i, *(p1+2) = s
代码2-6
#include <stdio.h>
int main()
{
char a[] = "fish";
int b[5] = {1, 2, 3, 4, 5};
float c[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double d[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
int *p1 = b;
printf("*p1=%d, *(p1+1)=%d, *(p1+2) = %d\n", *p1, *(p1+1), *(p1+2));
return 0;
}
输出结果:
*p1=1, *(p1+1)=2, *(p1+2) = 3
代码2-7
#include <stdio.h>
int main()
{
char a[] = "fish";
int b[5] = {1, 2, 3, 4, 5};
float c[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
double d[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
int *p1 = b;
printf("*b=%d, *(b+1)=%d, *(b+2) = %d\n", *b, *(b+1), *(b+2));
return 0;
}
数组元素用指针的形式来访问。
输出结果:
*b=1, *(b+1)=2, *(b+2) = 3
代码2-8
#include <stdio.h>
#include <string.h>
int main()
{
char *str = "I love my job!" ;
int i, length;
length =strlen(str);
for (i = 0; i < length; i++)
{
printf("%c", str[i]);
}
return 0;
}
输出结果:
I love my job!
char *str = "I love my job!" ;
定义一个字符指针变量,然后将它指向一个字符串,
printf("%c", str[i]);
用指针的下标法对指针变量进行访问。