⑴ c语言中指针怎么使用
1、使用场景
使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a数组首地址
//*b=2; 无法直接初始化
//printf("%d ", *b);
e=e+2; //移动两个地址单元
d=&c; //d指向c的地址来表示值
c=4; //修改原c变量的值,d指针的值会发生改变
b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值
*b=2;//分配空间后可以直接赋值了
printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);
2、类型说明
(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元
(2)char *b:表示一个指向char变量的指针
*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p ",*a,*(a+1),a);
(1)c语言做指针代码扩展阅读:
指针的运算
指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算
(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d ",*a);
结果输出2。
参考资料来源 :指针-网络
⑵ c语言如何将代码从数组写的方法改成指针来写
double *a;
int m,n,i;
printf("请输入矩阵有几行:");
scanf("%d",m);
printf("请输入矩阵有几列:");
scanf("%d",n);
a=(double *)malloc(m*n*sizeof(double)); //加在这里就OK了
for (i=0;i<m*n;i++)
scanf("%lf",&a[i]);
⑶ 关于C语言中的指针学习
printf("%d\n",(*pointer_1)++); //先输出(*pointer_1)的值100,之后,再对(*pointer_1)即a做自增运算,a的值变为101。
printf("%d\n",*pointer_1++); //先输出*pointer_1的值101,之后,再对pointer_1做自增运算,pointer_1指向内存中变量a的下一个内存空间!因为此句比上句少一括号,故自增的对象不同。
printf("%d\n",*pointer_1); //输出pointer_1指向的空间的值。但a之后内存值不确定!
*pointer_1++ //先计算*pointer_1,再计算pointer_1++
(*pointer_1)++ //先计算*pointer_1,再对pointer_1指向的变量进行++
*(pointer_1++) //同第一个,先计算*pointer_1,再计算pointer_1++
⑷ c语言指针详解
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。
为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。
C语言用变量来存储数据,用函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供 CPU 使用。数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。
当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。
CPU 只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知 CPU 要执行的代码以及要读写的数据的地址。
如果程序不小心出错,或者开发者有意为之,在 CPU 要写入数据时给它一个代码区域的地址,就会发生内存访问错误。这种内存访问错误会被硬件和操作系统拦截,强制程序崩溃,程序员没有挽救的机会。
变量名和函数名为我们提供了方便,让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不用直接面对二进制地址,那场景简直让人崩溃。
需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。
(4)c语言做指针代码扩展阅读
指针使用(* 和 &)
*&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。
&*pa可以理解为&(*pa),*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa。
对星号*的总结
在我们目前所学到的语法中,星号*主要有三种用途:
1、表示乘法,例如int a = 3, b = 5, c; c = a * b;,这是最容易理解的。
2、表示定义一个指针变量,以和普通变量区分开,例如int a = 100; int *p = &a;。
3、表示获取指针指向的数据,是一种间接操作,例如int a, b, *p = &a; *p = 100; b = *p;。
⑸ C语言 指针
首先1:
这个就是一个立方运算嘛。我把你的代码运行了一下,结果都是64,是不是你那个地方错了,再仔细看看呀。代码如下:
#include <iostream>
using namespace std;
float Get_X_2(float x)
{
return x*x*x;
}
int main()
{
int a=4;
float b=4;
cout<<Get_X_2(a)<<" 整型"<<endl;
cout<<Get_X_2(b)<<"单精度浮点型"<<endl;
return 0;
}
其次2:
int **p;// 这样看:int *(*p), *P是指向整型的指针(p存放整型数的地址);*(*p)当然就是指向整型指针的指针(*p存放一个整型指针的地址)
*p=new int *[40]; //int *[40];表示一个整型指针数组,长度是40;它的地址放进*P里。
//可以将这句与*p=new int[40];对照一下。//这个语句是错的,理由就是*p存放一个整型指针的地址
for (int i=0;i<40;i++)
p[i]=new int[60]; //应该理解为:为指针数组赋值,这个值来自 new int[60];或者说产生40个int[60];他们的地址放进指针数组。
⑹ C语言指针编程
代码文本:
#include "stdio.h"
#define N 10
#define F(x) ((x)>0 ? (x) : -(x))
int f(int *p){
int i,mini;
for(mini=0,i=1;i<N;i++)
if(F(p[mini]) > F(p[i]))
mini=i;
printf("%d ",p[mini]);
return mini;
}
int main(int argc,char *argv[]){
int a[N],i;
printf("Enter the %d integers... ",N);
for(i=0;i<N;scanf("%d",a+i++));
printf("The subscript is %d ",f(a));
return 0;
}
⑺ 跪求高手 C语言中的指针原理及代码
指针其实就是指向变量地址的变量(地址)。
代码:
时钟的代码
#include
<time.h>
#include
<stdio.h>
int
main()
{
time_t
stime;
printf("%ld\n",time(
&stime
)
);
}//
⑻ c语言程序设指针
我写了一个,已经调试通过,可以正确运行:
#include "stdio.h"
#include "string.h"
#define SIZE 200
void main()
{
int i;
int length;//字符串的长度变量
char sign[SIZE];
char s;
printf("请输入一个字符串:\n");
scanf("%s",sign);//输入一个字符串,sign数组名本身可以做地址
length=strlen(sign);//这是获得字符串长度函数,文件头要包含"string.h"
printf("字符串逆序输出为:\n");
for(i=length;i>0;i--)
{s= sign[i-1];
printf("%c",s);//这是倒序输出
}
}
PS:定义了一个SIZE为200的字符串,应该足够接收输入的字符。
祝楼主好运!如果有不明白的,可以一起交流···
⑼ 求C语言指针代码
用指针法实现冒泡法排序的C语言程序如下
#include<stdio.h>
void bubblesort(int *a,int n){
int i,j,t;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(*(a+j)<*(a+j+1)){
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=t;
}
}
}
}
int main(){
int i,a[]={32,98,51,28,12,38,57,43,115,21};
bubblesort(a,10);
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}
⑽ C语言指针代码问题
函数的声明后面需要加分号 定义后面不能有分号 所以才会出现missing function header 的错误
将定义后面的分号去掉就可以了